/**
 * Uniapp 页面路径存储工具（支持 pages、pagesA、pagesB 等前缀）
 * 功能：存储以 pages+字母 开头到 ? 结束的路径，最多10条，仅需使用的页面引入
 */

const STORAGE_KEY = 'uniapp_multi_page_paths'; // 存储键名
const MAX_LENGTH = 10; // 最大存储条数

/**
 * 提取以 pages+字母（如 pages、pagesA、pagesB）开头到 ? 结束的核心路径
 * @param {string} path - 页面路径（如 '/pagesA/detail?id=1' 或 'pagesB/home'）
 * @returns {string} 核心路径（如 'pagesA/detail'、'pagesB/home'）
 */
function getCorePath(path) {
	if (!path || typeof path !== 'string') return '';

	// 正则匹配：以 pages 开头，后面可跟任意字母（A-Za-z），捕获完整前缀（如 pages、pagesA、pagesB）
	const prefixMatch = path.match(/pages[A-Za-z]*/);
	if (!prefixMatch) return ''; // 不匹配 pages+字母 前缀，返回空

	const prefix = prefixMatch[0]; // 匹配到的前缀（如 pagesA）
	const prefixIndex = path.indexOf(prefix); // 前缀在路径中的起始位置

	// 从前缀开始截取，到 ? 为止（无 ? 则取到末尾）
	const pathAfterPrefix = path.slice(prefixIndex);
	const questionIndex = pathAfterPrefix.indexOf('?');

	return questionIndex > -1
		? pathAfterPrefix.slice(0, questionIndex)
		: pathAfterPrefix;
}

/**
 * 存储当前页面路径（仅在需要的页面调用）
 * @param {string} currentPath - 当前页面路径（通过 getCurrentPages() 获取）
 */
export function saveCurrentPagePath(currentPath) {
	if (!currentPath) return;

	// 1. 提取核心路径（支持 pages、pagesA、pagesB 等前缀）
	const corePath = getCorePath(currentPath);
	if (!corePath) return;

	// 2. 读取已有存储
	let storedPaths = [];
	try {
		const stored = uni.getStorageSync(STORAGE_KEY);
		if (stored && Array.isArray(JSON.parse(stored))) {
			storedPaths = JSON.parse(stored);
		}
	} catch (e) {
		console.error('读取路径存储失败：', e);
	}

	// 3. 去重（删除已有相同路径）
	storedPaths = storedPaths.filter(path => path !== corePath);

	// 4. 添加新路径到末尾
	storedPaths.push(corePath);

	// 5. 控制条数（超过10条则删除最早的一条）
	if (storedPaths.length > MAX_LENGTH) {
		storedPaths.shift(); // 删除数组第一个元素（最早存储的）
	}

	// 6. 重新存储
	try {
		uni.setStorageSync(STORAGE_KEY, JSON.stringify(storedPaths));
		console.log('页面路径存储成功：', storedPaths);
	} catch (e) {
		console.error('存储页面路径失败：', e);
	}
}

/**
 * 新增：获取当前页面的路径（不含参数，Uniapp 专用）
 * @returns {string} 当前页面路径（如 'pagesA/detail' 或 'pages/home'），失败返回空字符串
 */
export function getCurrentPageRoute() {
	try {
		// Uniapp 中通过页面栈获取当前页面信息
		const pages = getCurrentPages();
		if (!pages || pages.length === 0) {
			console.warn('页面栈为空，无法获取当前页面路径');
			return '';
		}
		// 获取当前页面实例（栈中最后一个元素）
		const currentPage = pages[pages.length - 1];
		// route 属性为页面路径（不含参数，如 'pagesA/detail'）
		return currentPage.route || '';
	} catch (e) {
		console.error('获取当前页面路径失败：', e);
		return '';
	}
}

/**
 * 从存储中获取最近一次存储的页面路径（视为当前页面路径）
 * @returns {string} 最近存储的路径（如 'pagesA/detail'），无存储时返回空字符串
 */
export function getStoredPaths() {
	try {
		// 从存储中读取路径数组
		const stored = uni.getStorageSync(STORAGE_KEY);
		if (!stored) {
			console.warn('未找到存储的页面路径');
			return '';
		}

		// 解析存储的数组
		const storedPaths = JSON.parse(stored);
		if (!Array.isArray(storedPaths) || storedPaths.length === 0) {
			console.warn('存储的页面路径为空或格式异常');
			return '';
		}

		// 返回数组最后一个元素（最近存储的路径，视为当前页面路径）
		return storedPaths[storedPaths.length - 1] || '';
	} catch (e) {
		console.error('从存储中获取当前页面路径失败：', e);
		return '';
	}
}

/**
 * 检查路径是否已存储
 * @param {string} path - 待检查路径（如 'pagesA/detail?id=2'）
 * @returns {boolean} 是否存在
 */
export function hasStoredPath(path) {
	const corePath = getCorePath(path);
	if (!corePath) return false;

	const storedPaths = getStoredPaths();
	return storedPaths.includes(corePath);
}

/**
 * 清空存储的路径
 */
export function clearStoredPaths() {
	try {
		uni.removeStorageSync(STORAGE_KEY);
		console.log('已清空所有存储的页面路径');
	} catch (e) {
		console.error('清空路径存储失败：', e);
	}
}
